﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace Enter.DataCommon
{
	/// <summary>
	/// 扩展方法
	/// </summary>
	public static class DataCommonExtenssions
	{
		#region DataSet

		/// <summary>
		/// 返回DataSet中的第一个DataTable对象。
		/// </summary>
		/// <param name="ds"></param>
		/// <returns></returns>
		public static DataTable First(this DataSet ds)
		{
			if (ds != null && ds.Tables.Count > 0)
				return ds.Tables[0];
			else
				return null;
		}

		#endregion

		#region DataTable


		/// <summary>
		/// 把DataTable第一行的值转换成 T 类型
		/// </summary>
		/// <typeparam name="T">从DataMap或DataReadonly继承的类型</typeparam>
		/// <param name="table">System.Data.DataTable</param>
		/// <returns></returns>
		public static T First<T>(this DataTable table) where T : MapSet, new()
		{
			return DataLoader.First<T>(table);
		}
		/// <summary>
		/// 获取DataTable中第一行列columnName的值，如果DataTable的数据行小于1时则返回T的默认值
		/// </summary>
		/// <typeparam name="T">返回数据类型</typeparam>
		/// <param name="columnName">要获取的字段</param>
		/// <returns>columnName字段中的数据</returns>
		public static T FirstRowVal<T>(this DataTable tb, string columnName) where T : MapSet, new()
		{
			if (tb.Rows.Count < 1)
				return default(T);

			return (from DataRow row in tb.Rows select (T)row[columnName]).First();
		}


		/// <summary>
		/// 把DataTable转换成 T 类型的list集合
		/// </summary>
		/// <typeparam name="T">从DataMap或DataReadonly继承的类型</typeparam>
		/// <param name="result">System.Data.DataTable</param>
		/// <returns></returns>
		public static IList<T> ToList<T>(this DataTable result) where T : MapSet, new()
		{
			return DataLoader.ToList<T>(result);
		}

		#endregion

		#region IDataReader


		/// <summary>
		/// 把IDataReader第一行的值转换成 T 类型
		/// </summary>
		/// <typeparam name="T">从DataMap或DataReadonly继承的类型</typeparam>
		/// <param name="table">System.Data.IDataReader</param>
		/// <returns></returns>
		public static T First<T>(this IDataReader reader) where T : MapSet, new()
		{
			return DataLoader.First<T>(reader);
		}
		/// <summary>
		/// 把IDataReader转换成 T 类型的list集合
		/// </summary>
		/// <typeparam name="T">从DataMap或DataReadonly继承的类型</typeparam>
		/// <param name="result">System.Data.DataTable</param>
		/// <returns></returns>
		public static IList<T> ToList<T>(this IDataReader result) where T : MapSet, new()
		{
			return DataLoader.ToList<T>(result);
		}


		#endregion
	}
}
